{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Encoder编码器\n",
    "- 工作原理与AutoEncoder相同，我们将编码得到的低维“特征值”在低维空间中可视化出来，直观显示数据的聚类效果。\n",
    "- 具体地说，将784维的MNIST数据一步步的从784到128到64到10最后降至2维，在2维坐标系中展示遇上一个例子不同的是，在编码器的最后一层中我们不采用Sigmoid激活函数，而是将采用默认的线性激活函数，使输出为（-∞，+∞）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import tensorflow as tf  \n",
    "import matplotlib.pyplot as plt  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ./mnist_data_sets/train-images-idx3-ubyte.gz\n",
      "Extracting ./mnist_data_sets/train-labels-idx1-ubyte.gz\n",
      "Extracting ./mnist_data_sets/t10k-images-idx3-ubyte.gz\n",
      "Extracting ./mnist_data_sets/t10k-labels-idx1-ubyte.gz\n"
     ]
    }
   ],
   "source": [
    "from tensorflow.examples.tutorials.mnist import input_data  \n",
    "mnist = input_data.read_data_sets(\"./mnist_data_sets/\", one_hot=False) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "learning_rate = 0.01  \n",
    "training_epochs = 10  \n",
    "batch_size = 256  \n",
    "display_step = 1  \n",
    "n_input = 784  \n",
    "X = tf.placeholder(\"float\", [None, n_input]) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "n_hidden_1 = 128  \n",
    "n_hidden_2 = 64  \n",
    "n_hidden_3 = 10  \n",
    "n_hidden_4 = 2 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "weights = {  \n",
    "    'encoder_h1': tf.Variable(tf.truncated_normal([n_input, n_hidden_1],)),  \n",
    "    'encoder_h2': tf.Variable(tf.truncated_normal([n_hidden_1, n_hidden_2],)),  \n",
    "    'encoder_h3': tf.Variable(tf.truncated_normal([n_hidden_2, n_hidden_3],)),  \n",
    "    'encoder_h4': tf.Variable(tf.truncated_normal([n_hidden_3, n_hidden_4],)),  \n",
    "    'decoder_h1': tf.Variable(tf.truncated_normal([n_hidden_4, n_hidden_3],)),  \n",
    "    'decoder_h2': tf.Variable(tf.truncated_normal([n_hidden_3, n_hidden_2],)),  \n",
    "    'decoder_h3': tf.Variable(tf.truncated_normal([n_hidden_2, n_hidden_1],)),  \n",
    "    'decoder_h4': tf.Variable(tf.truncated_normal([n_hidden_1, n_input],)),  \n",
    "}  \n",
    "biases = {  \n",
    "    'encoder_b1': tf.Variable(tf.random_normal([n_hidden_1])),  \n",
    "    'encoder_b2': tf.Variable(tf.random_normal([n_hidden_2])),  \n",
    "    'encoder_b3': tf.Variable(tf.random_normal([n_hidden_3])),  \n",
    "    'encoder_b4': tf.Variable(tf.random_normal([n_hidden_4])),  \n",
    "    'decoder_b1': tf.Variable(tf.random_normal([n_hidden_3])),  \n",
    "    'decoder_b2': tf.Variable(tf.random_normal([n_hidden_2])),  \n",
    "    'decoder_b3': tf.Variable(tf.random_normal([n_hidden_1])),  \n",
    "    'decoder_b4': tf.Variable(tf.random_normal([n_input])),  \n",
    "} "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def encoder(x):  \n",
    "    layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['encoder_h1']),  \n",
    "                                   biases['encoder_b1']))  \n",
    "    layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, weights['encoder_h2']),  \n",
    "                                   biases['encoder_b2']))  \n",
    "    layer_3 = tf.nn.sigmoid(tf.add(tf.matmul(layer_2, weights['encoder_h3']),  \n",
    "                                   biases['encoder_b3']))  \n",
    "    # 为了便于编码层的输出，编码层随后一层不使用激活函数  \n",
    "    layer_4 = tf.add(tf.matmul(layer_3, weights['encoder_h4']),  \n",
    "                                    biases['encoder_b4'])  \n",
    "    return layer_4 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def decoder(x):  \n",
    "    layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['decoder_h1']),  \n",
    "                                   biases['decoder_b1']))  \n",
    "    layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, weights['decoder_h2']),  \n",
    "                                   biases['decoder_b2']))  \n",
    "    layer_3 = tf.nn.sigmoid(tf.add(tf.matmul(layer_2, weights['decoder_h3']),  \n",
    "                                biases['decoder_b3']))  \n",
    "    layer_4 = tf.nn.sigmoid(tf.add(tf.matmul(layer_3, weights['decoder_h4']),  \n",
    "                                biases['decoder_b4']))  \n",
    "    return layer_4  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "encoder_op = encoder(X)  \n",
    "decoder_op = decoder(encoder_op)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_pred = decoder_op  \n",
    "y_true = X "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "cost = tf.reduce_mean(tf.pow(y_true - y_pred, 2))  \n",
    "optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cost)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('Epoch:', '0001', 'cost=', '0.106403738')\n",
      "('Epoch:', '0002', 'cost=', '0.111236766')\n",
      "('Epoch:', '0003', 'cost=', '0.110821351')\n",
      "('Epoch:', '0004', 'cost=', '0.111598782')\n",
      "('Epoch:', '0005', 'cost=', '0.108303443')\n",
      "('Epoch:', '0006', 'cost=', '0.114536531')\n",
      "('Epoch:', '0007', 'cost=', '0.115227319')\n",
      "('Epoch:', '0008', 'cost=', '0.107367165')\n",
      "('Epoch:', '0009', 'cost=', '0.108559318')\n",
      "('Epoch:', '0010', 'cost=', '0.111203603')\n",
      "Optimization Finished!\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fb9ea424890>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:  \n",
    "    # tf.initialize_all_variables() no long valid from  \n",
    "    # 2017-03-02 if using tensorflow >= 0.12  \n",
    "    if int((tf.__version__).split('.')[1]) < 12 and int((tf.__version__).split('.')[0]) < 1:  \n",
    "        init = tf.initialize_all_variables()  \n",
    "    else:  \n",
    "        init = tf.global_variables_initializer()  \n",
    "    sess.run(init)  \n",
    "    total_batch = int(mnist.train.num_examples/batch_size)  \n",
    "    for epoch in range(training_epochs):  \n",
    "        for i in range(total_batch):  \n",
    "            batch_xs, batch_ys = mnist.train.next_batch(batch_size)  # max(x) = 1, min(x) = 0  \n",
    "            _, c = sess.run([optimizer, cost], feed_dict={X: batch_xs})  \n",
    "        if epoch % display_step == 0:  \n",
    "            print(\"Epoch:\", '%04d' % (epoch+1), \"cost=\", \"{:.9f}\".format(c))  \n",
    "    print(\"Optimization Finished!\")  \n",
    "\n",
    "    encoder_result = sess.run(encoder_op, feed_dict={X: mnist.test.images})  \n",
    "    plt.scatter(encoder_result[:, 0], encoder_result[:, 1], c=mnist.test.labels)  \n",
    "    plt.colorbar()  \n",
    "    plt.show() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
